索伯算子是圖像處理中先前介紹Canny邊緣檢測算法的核心。索伯算子索伯算子最早是由美國計算機科學家艾爾文·索伯及蓋瑞·費德曼於1968年在史丹佛大學的人工智慧實驗室所提出,有時又稱為索伯-費德曼算子或索貝濾波器,在影像處理及電腦視覺領域中常被用來做邊緣檢測[1]。
進行OpenCv Sobel運算,需要將圖像轉成灰階
注意: 確認使用正確的灰階圖像轉換,具體取決於您在圖像中的讀取方式。 如果您使用mpimg.imread()讀入圖像,請使用cv2.COLOR_RGB2GRAY。 如果您使用cv2.imread()讀入圖像,請使用cv2.COLOR_BGR2GRAY。
gray = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)
計算xx方向的導數(末端的1,0表示xx方向):
sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0)
計算yy方向的導數(0,1,結尾表示yy方向):
sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1)
計算xx導數的絕對值:
abs_sobelx = np.absolute(sobelx)
將絕對值圖像轉換為8位元:
scaled_sobel = np.uint8(255*abs_sobelx/np.max(abs_sobelx))
注意:並不是完全必要進行轉換為8進位(範圍從0到255),但實務上,如果您編寫了一個應用特定門檻值的函數,並且希望它能夠工作,這方法可能很有用。 在不同尺度的輸入圖像上相同,如jpg與png。 您也可以選擇不同的標準值範圍,例如0到1等。
Create a binary threshold to select pixels based on gradient strength:
基於梯度強度去建立二進位制門檻值以利選擇像素:
thresh_min = 20
thresh_max = 100
sxbinary = np.zeros_like(scaled_sobel)
sxbinary[(scaled_sobel >= thresh_min) & (scaled_sobel <= thresh_max)] = 1
plt.imshow(sxbinary, cmap='gray')
成果: